package org.asdtiang.designer
import org.springframework.web.servlet.support.RequestContextUtils as RCU;
import org.codehaus.groovy.grails.commons.ConfigurationHolder
class AjaxPageTagLib {
	def paginateAjax={attrs ->
		def writer = out
		params.offset = Math.min(params.offset ? params.offset as int : 0, 100)
		params.sort=params.sort==null?"dateCreated":params.sort
		params.order=params.order==null?"desc":params.order
		def messageSource = grailsAttributes.getApplicationContext().getBean("messageSource")
		def locale = RCU.getLocale(request)		
		def total = attrs.total.toInteger()
		def offset = params.offset?.toInteger()
		def max = params.max?.toInteger()
		int pageSize=Math.round(Math.ceil(total / max))	
		def path=request.getContextPath()	
		def pageNow=offset/max+1
		def selectMax=attrs.selectMax?.toInteger()
		if(!selectMax){
			selectMax=20
		}
		selectMax=selectMax>total?total:selectMax
		////js输出
		writer<<"""
		 <script type="text/javascript">
		 function myUpdate(update1,url1,parameters1,max){
			  var selectValue=document.getElementById("ajaxSelect").value
			  var offset=max*(selectValue-1)
			  var newParams="offset="+offset+parameters1
			  new Ajax.Updater(update1,url1,{asynchronous:true,evalScripts:true,
			  parameters:newParams});
			  return false;
		 }
		 function myUpdate2(update1,url1,parameters1){
		      var max=document.getElementById("ajaxMax").value
		      var newParams="max="+max+parameters1
			  new Ajax.Updater(update1,url1,{asynchronous:true,evalScripts:true,parameters:newParams});
			  return false;
		 }
		 </script>
		 
		 <div id="ajaxPage">
		"""
		/////显示首页和上页
		def firstText=messageSource.getMessage('paginate.first', null, messageSource.getMessage('default.paginate.first', null, 'First', locale), locale)
		def prevText=messageSource.getMessage('paginate.prev', null, messageSource.getMessage('default.paginate.prev', null, 'Prev', locale), locale)
		def nextText=messageSource.getMessage('paginate.next', null, messageSource.getMessage('default.paginate.next', null, 'Next', locale), locale)
		def lastText=messageSource.getMessage('paginate.last', null, messageSource.getMessage('default.paginate.last', null, 'Last', locale), locale)
		
		if(offset!=0){
			def firstUrl="""offset=0&max=${params.max}&sort=${params.sort}&order=${params.order}&total=${total}"""
			writer<<"""
			<span id="firstShow" title="${firstText}" onclick="new Ajax.Updater('${attrs.update}',
		'${path}/${params.controller}/${params.action}',{asynchronous:true,evalScripts:true,parameters:'${firstUrl}'});
		return false;" >
			[${firstText}]
			</span>
			"""
			int prev=offset-max
			def prevUrl="""offset=${prev}&max=${params.max}&sort=${params.sort}&order=${params.order}&total=${total}"""
			writer<<"""
				<span id="preShow" title="${prevText}" onclick="new Ajax.Updater('${attrs.update}',
			'${path}/${params.controller}/${params.action}',{asynchronous:true,evalScripts:true,parameters:'${prevUrl}'});
			return false;" >
				[${prevText}]
				</span>
				"""
		}
		else{
			writer<<"""<span id="firstNoShow" title="${firstText}">
				      [${firstText}]
				      </span>
				"""
			writer<<"""<span id="preNoShow" title="${prevText}">
					[${prevText}]
					</span>
					"""
		}
		////数据信息输出
		writer<<"""<span id="ajaxPageInfo">当前${pageNow}/${pageSize}页（共${total}）</span>"""
		
		//下一页和末页输出，
		if(offset!=max*(pageSize-1)){
			int next1=offset+max
			def nextUrl="""offset=${next1}&max=${params.max}&sort=${params.sort}&order=${params.order}&total=${total}"""
			
			writer<<"""
				<span id="nextShow"   title="${nextText}" onclick="new Ajax.Updater('${attrs.update}',
			'${path}/${params.controller}/${params.action}',{asynchronous:true,evalScripts:true,parameters:'${nextUrl}'});
			return false;" >
				[${nextText}]
				</span>
				"""
			int last=max*(pageSize-1)
			def lastUrl="""offset=${last}&max=${params.max}&sort=${params.sort}&order=${params.order}&total=${total}"""
			writer<<"""
				<span id="lastShow" title="${lastText}" onclick="new Ajax.Updater('${attrs.update}',
			'${path}/${params.controller}/${params.action}',{asynchronous:true,evalScripts:true,parameters:'${lastUrl}'});
			return false;" >
				[${lastText}]
				</span>
				"""
		}
		else{
			writer<<"""<span id="nextNoShow" title="${nextText}">
				[${nextText}]
				</span>
				"""
			writer<<"""<span id="lastNoShow" title="${lastText}">
				[${lastText}]
				</span>
				"""
		}
		///到指定页连接输出
		def selectUrl="&max=${params.max}&sort=${params.sort}&order=${params.order}&total=${total}"
		writer<<"""
		<span id="ajaxSelectText">转到<select id="ajaxSelect" onchange="myUpdate('${attrs.update}','${path}/${params.controller}/${params.action}'
		,'${selectUrl}','${max}')">
		
		"""
		for(int j=1;j<=pageSize;j++){
			if(pageNow!=j){
				writer<<"""  <option value ="${j}">${j}/${pageSize}</option>           """
			}
			else{
				writer<<"""  <option value ="${j}"  selected="selected">${j}/${pageSize}</option>           """
			}
		}
		writer<<"</select>页</span>"
		
		////每页显示几条数据
		def maxUrl="&offset=0&sort=${params.sort}&order=${params.order}&total=${total}"
		writer<<"""
			 <span id="ajaxMaxText"> 每页显示</span><select id="ajaxMax" onchange="myUpdate2('${attrs.update}','${path}/${params.controller}/${params.action}'
			,'${maxUrl}')">
			"""
		for(int j=1;j<=selectMax;j++){
			if(max!=j){
				writer<<"""<option value ="${j}">${j}</option>"""
			}
			else{
				writer<<"""<option value ="${j}"  selected="selected">${j}</option>"""
			}
		}
		writer<<"</select> </div>"
	}
}




